package com.train.mgr.modules.system.controller;

import com.train.common.model.PageResult;
import com.train.common.model.R;
import com.train.mgr.config.poi.ExcelUtil;
import com.train.mgr.modules.system.dto.request.PositionAddReqDTO;
import com.train.mgr.modules.system.dto.request.PositionImportDTO;
import com.train.mgr.modules.system.dto.request.PositionReqDTO;
import com.train.mgr.modules.system.dto.request.groups.Insert;
import com.train.mgr.modules.system.dto.request.groups.Update;
import com.train.mgr.modules.system.dto.response.PositionDetailRespDTO;
import com.train.mgr.modules.system.entity.Position;
import com.train.mgr.modules.system.service.IPositionService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import springfox.documentation.annotations.ApiIgnore;

import java.io.IOException;
import java.util.List;

/**
 * 岗位信息操作处理
 *
 * @author cxg
 */
@Api( tags = "岗位模块")
@ApiIgnore
@RestController
@RequestMapping("/system/position")
public class PositionController {
    @Autowired
    private IPositionService postService;

    /**
     * 获取岗位列表
     */
    @GetMapping("/page")
    @ApiOperation("岗位列表")
    public R<PageResult<Position>> pageList(PositionReqDTO page) {
        return R.succeed(postService.pageList(page));
    }


    /**
     * 根据岗位编号获取详细信息
     */
    @GetMapping(value = "/{postId}")
    @ApiOperation("查询详情")
    public R<PositionDetailRespDTO> getInfo(@PathVariable Long postId) {
        return R.succeed(postService.findDetailById(postId));
    }

    /**
     * 新增岗位
     */
    @PostMapping("/add")
    @ApiOperation("新增岗位")
    public R add(@Validated(Insert.class) @RequestBody PositionAddReqDTO post) {
        if (!postService.checkPostNameUnique(post)) {
            return R.failed("新增岗位'" + post.getPostName() + "'失败，岗位名称已存在");
        }
        else if (!postService.checkPostCodeUnique(post)) {
            return R.failed("新增岗位'" + post.getPostName() + "'失败，岗位编码已存在");
        }
        return R.succeed(postService.insertPost(post));
    }

    /**
     * 修改岗位
     */
    @PutMapping("/edit")
    @ApiOperation("修改岗位")
    public R edit(@Validated(Update.class) @RequestBody PositionAddReqDTO post) {
        if (!postService.checkPostNameUnique(post)) {
            return R.failed("修改岗位'" + post.getPostName() + "'失败，岗位名称已存在");
        }
        else if (!postService.checkPostCodeUnique(post)) {
            return R.failed("修改岗位'" + post.getPostName() + "'失败，岗位编码已存在");
        }
        return R.succeed(postService.updatePost(post));
    }

    /**
     * 删除岗位
     */
    @ApiOperation("删除岗位")
    @DeleteMapping("/{postIds}")
    public R remove(@PathVariable Long[] postIds)
    {
        return R.succeed(postService.deletePostByIds(postIds));
    }

    /**
     * 获取岗位选择框列表
     */
    @ApiOperation("查岗位选择框列表")
    @GetMapping("/optionselect")
    public R optionselect() {
        List<Position> posts = postService.selectPostAll();
        return R.succeed(posts);
    }


    @ApiOperation("导入岗位数据")
    @PostMapping("/import")
    public R<Boolean> importExcel(@RequestParam("file") MultipartFile file) throws IOException {
        ExcelUtil<PositionImportDTO> util = new ExcelUtil<>(PositionImportDTO.class);
        List<PositionImportDTO> importList=null;
        try {
            importList = util.importExcel(file.getInputStream());
        } catch (Exception e) {
            throw new RuntimeException("excel导入客户数据解析异常，请联系管理员");
        }
        boolean result = postService.saveExcelData(importList);
        return R.succeed("导入数据成功~");
    }


}
